#include<iostream>
#include<cstring>
using namespace std;
class CArray
{
	int size;
	int *ptr;
	public:
		CArray(int s=0);
		CArray(const CArray&a);
		~CArray();
		void push_back(int v);
		CArray&operator=(const CArray &a);
	int length(){
		return size;
	}
	int & operator[](int i)
	{
		return ptr[i];
		
	}
};
CArray::CArray(int s):size(s)
{
	if(s==0)
	ptr=NULL;
	else 
	ptr=new int [s];
	
}
CArray::CArray(const CArray & a )
{
	if(!a.ptr){
		ptr=NULL;
		size =0;
		return ;
	}
	ptr=new int[a.size];
	memcpy(ptr,a.ptr,sizeof(int)*a.size);
	size=a.size;
}
CArray::~CArray(){
	if(ptr)delete[] ptr;
}
CArray&CArray::operator=(const CArray&a)
{
	if(ptr==a.ptr)
	return *this;
	if(a.ptr==NULL)
	{
		if(ptr)
		delete[]ptr;
		ptr=NULL;
		size=0;
		return *this;
	}
	if(size<a.size){
		if(ptr)
		delete[]ptr;
		ptr=new int[a.size];
	}
	memcpy(ptr,a.ptr,sizeof(int)*a.size);
	size=a.size;
	return *this;
}
void CArray::push_back(int v)
{
	if(ptr){
		int *tmpPtr=new int[size+1];
		memcpy(tmpPtr,ptr,sizeof(int )*size);
		delete []ptr;
		ptr=tmpPtr;
	}
	else
	ptr=new int[1];
	ptr[size++]=v;
	
}
int main()
{
	CArray a;
	for(int i=0;i<5;++i)
	a.push_back(i);
	CArray a2,a3;
	a2=a;
	for(int i=0;i<a.length();++i)
	cout<<a2[i]<<"";
	a2=a3;
	for(int i=0;i<a2.length();++i)
	cout<<a2[i]<<"";
	cout<<endl;
	a[3]=100;
	CArray a4(a);
	for(int i=0;i<a4.length();++i)
	cout<<a4[i]<<"";
	return 0;	
}
